'use strict';

const Controller = require('egg').Controller;
const { SuccessModel, FailModel } = require('../resModel/index')

class CartController extends Controller {
  // 购物车表
  // 1. 查询列表接口 （根据当前登陆人员）
  async findCartList() {
    const errors = this.app.validator.validate({
      page: {required: false, type: 'string'},
      size: {required: false, type: 'string'}
    }, this.ctx.query)
    const { id } = this.ctx.state;
    console.log('id.....:id', id)
    if (!errors) {
      const {page, size} = this.ctx.query;
      const res = await this.app.mysql.select('cartGoods', {
        limit: Number(size), // 返回数据量
        offset: page * size, // 数据偏移量
        where: {userId: id}
      })
      this.ctx.body = new SuccessModel(res, '查询成功')
    } else {
      this.ctx.body = new FailModel('查询fail')
    }
  }

  // 加入购物车接口
  async toCartItem() {
    const { skuId } = this.ctx.query; // 商品id
    const { id } = this.ctx.state;    // 身份id
    // 查 +
    const data = await this.app.mysql.get(`cartGoods`, { skuId,
      userId: id })
    if (!data) {
      const data = await this.app.mysql.get('goods', {skuId})
      const insertData = await this.app.mysql.insert('cartGoods', {
        userId: id,
        skuCount: 1,
        skuId: data.skuId,
        imgUrl: data.imgUrl
      })
      this.ctx.body = new SuccessModel(insertData,'success')
    } else {
      const getCartItem = await this.app.mysql.get('cartGoods', {skuId})
      // 当前购物车中已经存在这个数据了
      const updateData = await this.app.mysql.update('cartGoods', {
        skuCount: getCartItem.skuCount + 1
      }, {
        where: {skuId}
      })
      this.ctx.body = new SuccessModel(updateData, '再次加入购物车成功')
    }
  }

  // 2. 删除购物车列表接口 （从当前这个人下，移除一条数据）
  async deleteCartItem() {
    // - 用户id要匹配  - 商品id要匹配
    const { skuId } = this.ctx.params;
    const { id } = this.ctx.state;
    const data = await this.app.mysql.query(`delete from cartGoods where userid=? and skuId=?`, [id, skuId])
    if (data.affectedRows) {
      this.ctx.body = new SuccessModel(data, '删除成功')
    } else {
      this.ctx.body = new FailModel('无权限删除或者删除失败')
    }
  }

  // 购物车 ++ -- 接口
  async updateSkuount() {
    // 哪个用户的哪个商品  id就是用户 skuId就是商品
    const { skuCount, skuId } = this.ctx.request.body;
    const { id } = this.ctx.state;
    const data = await this.app.mysql.update('cartGoods', {
      skuCount
    }, {
      where: {skuId, userId: id}
    })
     if (data.affectedRows) {
      this.ctx.body = new SuccessModel('修改成功')
     } else {
      this.ctx.body = new FailModel('修改失败或者当前用户验证失败')
     }
  }


  // 3. ++ 加加接口 更新数据库数量  1 --->  存储在数据库 ----> 1 + 1 2 ---> 村 --->
  // async addCartItem() {

  // }

  // 4. -- 减减接口
  // async removeCartItem() {
  //   const { skuCount, skuId } = this.ctx.request.body;
  //   console.log(this.ctx.state, '用户信息')
  //   const { id } = this.ctx.state;
  //   const data = await this.app.mysql.query(`
  //    update cartGoods set skuCount=? where skuId=? and userId=?`,
  //    [skuCount, skuId, id]
  //    )
  //    if (data.affectedRows) {
  //     this.ctx.body = new SuccessModel('修改成功')
  //    } else {
  //     this.ctx.body = new FailModel('修改失败或者当前用户验证失败')
  //    }
  // }

  // 5. 总价接口：
  async allCartListPrice() {
    // 1. 从数据库中查出所有的当前用户 的商品信息  skuCount price
    // 需要从登陆拦截中间件中，获取到当前用户的身份id
    // 根据用户身份id查找 当前的所有的购物车数量， 计算
    const { id } = this.ctx.state;
    console.log(id, 'id')
    const data = await this.app.mysql.query(`select cartGoods.userId, cartGoods.skuId, goods.price , cartGoods.skuCount
    from cartGoods left join goods on cartGoods.skuId=goods.skuId where cartGoods.userId=?`, [id])
    let totalPrice = 0
    if (data.length) {
      totalPrice = data.reduce((num, item) => {
        return num + Number(item.price) * item.skuCount
      }, 0)
    }
    this.ctx.body = new SuccessModel({totalPrice}, '查询成功')
  }

  // 6. 商品详情页面
  async detailCartItem() {
    this.ctx.body = {
      code: 0,
      msg: 'detailCartItem'
    }
  }
}

module.exports = CartController;
